home *** CD-ROM | disk | FTP | other *** search
/ Belgian Amiga Club - ADF Collection / BS1 part 34.zip / BS1 part 34 / FredFish PD 316.adf / IntuiSup / Applications / SmallBenchSrc / file.c next >
C/C++ Source or Header  |  1990-02-06  |  6KB  |  218 lines

  1. #include <intuition/intuisup.h>
  2. #include <libraries/dos.h>
  3. #include <workbench/startup.h>
  4. #include <workbench/workbench.h>
  5.  
  6. #ifndef DEBUG
  7. #include <proto/all.h>
  8. #endif
  9.  
  10. #define  HUNK_UNIT     0xe7
  11. #define  HUNK_HEADER   0xf3
  12.  
  13. #define  KNOWN_FILE_TYPES  6
  14.  
  15. #define  INVALID_FILE     -2
  16. #define  UNKNOWN_FILE     -1
  17. #define  EXECUTABLE_FILE   0
  18. #define  OBJECT_FILE       1
  19. #define  ASCII_FILE        2
  20. #define  IFF_ILBM_FILE     3
  21. #define  IFF_8SVX_FILE     4
  22. #define  IFF_ANIM_FILE     5
  23.  
  24. BOOL     use_quotes = TRUE, use_prompt = TRUE;
  25. UBYTE    Type[KNOWN_FILE_TYPES][25] =
  26.    {
  27.    "executable",
  28.    "object module",
  29.    "ascii text",
  30.    "IFF picture (ILBM)",
  31.    "IFF sound (8SVX)",
  32.    "IFF animation (ANIM)",
  33.    };
  34. UBYTE    Viewer[KNOWN_FILE_TYPES][21] =
  35.    {
  36.    /*--- Max len 20 ---*/
  37.    "",
  38.    "DISABLED",
  39.    "etc:less",
  40.    "etc:show",
  41.    "etc:play",
  42.    "etc:movie"
  43.    };
  44. UBYTE    ToolType[KNOWN_FILE_TYPES][8] =
  45.    {
  46.    "",
  47.    "OBJECT",
  48.    "TEXT",
  49.    "PICTURE",
  50.    "SOUND",
  51.    "ANIM"
  52.    };
  53.  
  54. VOID Help()
  55. {
  56.    printf("Usage: smallbench [?] [ [-h|p|q] [-r|o|t|i|s|a <file>|DISABLED] ... ]\n");
  57.    printf("       -h : printf this reminder\n");
  58.    printf("       -p : disable file type verification, default on\n");
  59.    printf("       -q : disable quotes around filename, default on\n");
  60.    printf("       -t <file>: text file viewer, default etc:less\n");
  61.    printf("       -o <file>: object file application, default DISABLED\n");
  62.    printf("       -i <file>: IFF ILBM viewer, default etc:show\n");
  63.    printf("       -s <file>: IFF 8SVX player, default etc:play\n");
  64.    printf("       -a <file>: IFF ANIM player, default etc:movie\n");
  65.    printf("       Using DISABLED instead of <file> disables action.\n");
  66.    printf("Version 1.1, written by Gauthier Groult, 89.1020\n");
  67. }
  68.  
  69. BYTE ParseCLIArgs(argc, argv)
  70. UBYTE argc, **argv;
  71. {
  72.    UBYTE arg = 1, viewer;
  73.  
  74.    while (arg<argc)
  75.          {
  76.          switch(argv[arg][0])
  77.                {
  78.                case '?':
  79.                   Help();
  80.                   return(1);
  81.                break;
  82.  
  83.                case '-':
  84.                   viewer = 0;
  85.                   switch(argv[arg][1])
  86.                         {
  87.                         case 'h': Help(); return(1); break;
  88.                         case 'p': use_prompt = FALSE; break;
  89.                         case 'q': use_quotes = FALSE; break;
  90.                         case 'o': viewer = 1; break;
  91.                         case 't': viewer = 2; break;
  92.                         case 'i': viewer = 3; break;
  93.                         case 's': viewer = 4; break;
  94.                         case 'a': viewer = 5; break;
  95.                         default: return(2);
  96.                         }
  97.                   if (viewer && argv[arg+1][0])
  98.                      {
  99.                      StrCpy(Viewer[viewer], argv[arg+1]);
  100.                      arg+=2;
  101.                      }
  102.                   else arg++;
  103.                break;
  104.  
  105.                default: return(2);
  106.                }
  107.          }
  108.    return(0);
  109. }
  110.  
  111. VOID ParseWBArgs(wbMsg)
  112. struct WBStartup *wbMsg;
  113. {
  114.    UBYTE  i, *s, **toolarray;
  115.    struct WBArg      *wbArg;
  116.    struct DiskObject *diskobj;
  117.  
  118.    /* Get ToolTypes from SmartIcon.info */
  119.    wbArg = wbMsg->sm_ArgList;
  120.    diskobj=(struct DiskObject *)GetDiskObject(wbArg->wa_Name);
  121.    if(diskobj)
  122.       {
  123.       toolarray = (char **)diskobj->do_ToolTypes;
  124.  
  125.       for(i=1; i<KNOWN_FILE_TYPES; i++)
  126.          if (s=(UBYTE *)FindToolType(toolarray, ToolType[i])) StrCpy(Viewer[i], s);
  127.  
  128.       if ((s=(UBYTE *)FindToolType(toolarray, "PROMPT")) && !StrCmp(s, "OFF")) use_prompt = FALSE;
  129.       if ((s=(UBYTE *)FindToolType(toolarray, "QUOTES")) && !StrCmp(s, "OFF")) use_quotes = FALSE;
  130.  
  131.       FreeDiskObject(diskobj);
  132.       }
  133. }
  134.  
  135. BYTE FileType(window, filename)
  136. struct Window *window;
  137. UBYTE *filename;
  138. {
  139.    BYTE  rc = 0;
  140.    SHORT i = 0, flag = 1;
  141.    UBYTE buffer[400];
  142.    struct FileHandle *filep;
  143.  
  144.    if (!(filep = (struct FileHandle *)Open(filename, MODE_OLDFILE))) return(INVALID_FILE);
  145.  
  146.    SetPointerNum(window, WAIT_POINTER);
  147.    for(i=0; i<400; i++) buffer[i]=0;
  148.    Read(filep, buffer, 4);
  149.    if  (buffer[3]==HUNK_UNIT) rc = OBJECT_FILE;
  150.    else
  151.      if  (buffer[3]==HUNK_HEADER) rc = EXECUTABLE_FILE;
  152.      else
  153.         if (!StrCmp(buffer,"FORM",4))
  154.            {
  155.            Read(filep, buffer, 4);
  156.            Read(filep, buffer, 4);
  157.            if (!StrCmp(buffer, "ILBM")) rc = IFF_ILBM_FILE;
  158.            if (!StrCmp(buffer, "8SVX")) rc = IFF_8SVX_FILE;
  159.            if (!StrCmp(buffer, "ANIM")) rc = IFF_ANIM_FILE;
  160.            }
  161.         else
  162.            {
  163.            Read(filep, buffer, 400);
  164.            while (flag && (i++<400) ) if (buffer[i]>0x7E && buffer[i]<0xA0) flag = 0;
  165.            if (flag) rc = ASCII_FILE;
  166.            else      rc = UNKNOWN_FILE;
  167.            }
  168.  
  169.    Close(filep);
  170.    SetPointerNum(window, WBENCH_POINTER);
  171.    return(rc);
  172. }
  173.  
  174. BOOL
  175. TypePrompt(window, filename, type)
  176. struct Window *window;
  177. UBYTE *filename, type;
  178. {
  179.    if (AutoSmartRequest(window, 3, BaseName(filename),
  180.                        "supposed type is:", Type[type],
  181.                         0, "Ok", "Cancel", NULL, NULL) ) return(TRUE);
  182.    return(FALSE);
  183. }
  184.  
  185. VOID DisplayFile(window, filename, type)
  186. struct Window *window;
  187. UBYTE *filename, type;
  188. {
  189.    UBYTE command[80];
  190.    struct FileHandle *nil = (struct FileHandle *)Open("NIL:", MODE_NEWFILE); /* always succesfull */
  191.  
  192.    if (use_prompt && !(TypePrompt(window, filename, type))) return;
  193.  
  194.    if (StrCmp(Viewer[type], "DISABLED"))
  195.       {
  196.       StrCpy(command, "c:run >NIL: <NIL: " );
  197.       if (type)
  198.          {
  199.          StrCat(command, Viewer[type]);
  200.          StrCat(command, " >NIL: <NIL: ");
  201.          }
  202.  
  203.       if (use_quotes) StrCat(command, "\"");
  204.       StrCat(command, filename);
  205.       if (use_quotes) StrCat(command, "\"");
  206.  
  207.       SetPointerNum(window, WAIT_POINTER);
  208. #ifdef DEBUG
  209.       printf("Execute %s\n", command);
  210. #endif
  211.       if (!Execute(command, nil, nil)) DisplayBeep(NULL);
  212.       SetPointerNum(window, WBENCH_POINTER);
  213.       }
  214.    Close(nil);
  215. }
  216.  
  217.  
  218.